// ----------------------------------------------------------------------------
// OpenGL Anti-Grain Geometry (GL-AGG) - Version 0.1
// A high quality OpenGL rendering engine for C
// Copyright (C) 2012 Nicolas P. Rougier. All rights reserved.
// Contact: Nicolas.Rougier@gmail.com
//          http:* code.google.com/p/gl-agg/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//  1. Redistributions of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//
//  2. Redistributions in binary form must reproduce the above copyright
//     notice, this list of conditions and the following disclaimer in the
//     documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY NICOLAS P. ROUGIER ''AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
// EVENT SHALL NICOLAS P. ROUGIER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// The views and conclusions contained in the software and documentation are
// those of the authors and should not be interpreted as representing official
// policies, either expressed or implied, of Nicolas P. Rougier.
// ----------------------------------------------------------------------------
varying float a;
varying float b;
varying vec2 radii;
varying float thickness;
void main (void)
{
    vec4 vertex = gl_Vertex;

    thickness = gl_MultiTexCoord0.z;

    float radius_x = gl_MultiTexCoord0.x;
    float x = sign(radius_x);
    radius_x = abs(radius_x) + thickness/2.0 ;
    float wx = radius_x+1.0;

    float radius_y = gl_MultiTexCoord0.y;
    float y = sign(radius_y);
    radius_y = abs(radius_y) + thickness/2.0 ;
    float wy = radius_y+1.0;


    vertex.x += x * wx;
    vertex.y += y * wy;
    gl_Position = gl_ModelViewProjectionMatrix * vertex;
   
    gl_TexCoord[0].x = x * ( wx / (wx-1.0) );
    gl_TexCoord[0].y = y * ( wy / (wy-1.0) );
    gl_FrontColor = gl_Color;

    a = (radius_x / (radius_x - thickness/2.));
    b = (radius_y / (radius_y - thickness/2.));
    radii = vec2( min(radius_x, radius_y), max(radius_x, radius_y) );
}
